package com.itheima.leetcode.od.b.recursion_single;

import java.util.LinkedList;

/**
 * <h3>水仙花数II</h3>
 * 给定非空字符串s，将该字符串分割成一些子串，使每个子串的ASCII码值的和均为水仙花数。
 * <p>
 * 1、若分割不成功，则返回0；
 * <p>
 * 2、若分割成功且分割结果不唯一，则返回-1；
 * <p>
 * 3、若分割成功且分割结果唯一，则返回分割后子串的数目。
 * <p>
 * 输入描述
 * <p>
 * 输入字符串的最大长度为200
 * <p>
 * 输出描述
 * <p>
 * 根据题目描述中情况，返回相应的结果。
 * <p>
 * 示例1 输入输出示例仅供调试，后台判题数据一般不包含示例
 * <p>
 * 输入 abc
 * <p>
 * 输出 0
 * <p>
 * 说明 分割不成功
 * <p>
 * 示例2 输入输出示例仅供调试，后台判题数据一般不包含示例
 * <p>
 * 输入 f3@d5a8
 * <p>
 * 输出 -1
 * <p>
 * 说明 分割成功但分割结果不唯一，可以分割为两组，
 * 一组：""f3"" 和 ""@d5a8""
 * 另一组: ""f3@d5"" 和 ""a8""
 * <p>
 * 示例3
 * <p>
 * 输入 AXdddF
 * <p>
 * 输出 2
 * <p>
 * 说明 分割成功且结果唯一，可以分割为AX""(153) 和""dddF""(370)
 * <p>
 * 备注：此题表示 “水仙花数”是指一个三位数，每位上数字的立方和等于该数字本身，如371是'水仙花数'，因371=3^3+7^3+1^3
 */
public class NarcissisticNumberII {
    public static void main(String[] args) {
        /*// 处理输入
        Scanner in = new Scanner(System.in);
        String line = in.nextLine();*/

        String line = "f3@d5a8";
        int count = 2;
        find(line, count);

        int result = 0;
        if (resList.size() > 1) {
            result = -1;
        } else if (resList.size() == 1) {
            result = resList.get(0);
        }

        System.out.println(result);

    }

    public static LinkedList<Integer> resList = new LinkedList<>();

    //  递归求解
    public static void find(String line, int count) {
        for (int i = 1; i < line.length(); i++) {
            String sub1 = line.substring(0, i);
            String sub2 = line.substring(i);
            if (check(get_sum(sub1))) {
                /*if (check(get_sum(sub2))) {
                    resList.add(count);
                } else { // 作者这里写错了，即使符合水仙花数条件也应该继续分治，而且是错上加错，应该是find(sub2, ++count)，建议单独拎出来一行修改为count++;++count;就无所谓了
                    find(sub2, count++);
                }*/
                if (check(get_sum(sub2))) {
                    resList.add(count);
                }
                count++;
                find(sub2, count);
            }
        }
    }

    public static int get_sum(String str) {
        int sum = 0;
        char[] chars = str.toCharArray();
        for (int i = 0; i < str.length(); i++) {
            sum += chars[i];
        }
        return sum;
    }

    public static boolean check(int sum) {
        int i = sum % 10;
        int j = sum / 10 % 10;
        int k = sum / 100;
        return i * i * i + j * j * j + k * k * k == sum;
    }

}
